package com.penghaisoft.microwms.base.web.auth.service;


import com.penghaisoft.microwms.common.page.Pager;
import com.penghaisoft.microwms.common.base.model.*;
import com.penghaisoft.microwms.common.dto.Resp;
import com.penghaisoft.microwms.common.dto.UserFactoryDto;

import java.util.List;

/**
 * @Description 工厂处理
 * @author luoteng
 * @date 2017年5月24日 上午10:57:00
 * @version 1.0
 */
public interface IBaseFactoryService {
	
	/** 
	 * @Title create
	 * @Description 创建工厂
	 * @author luoteng
	 * @date 2017年5月24日 上午10:57:52
	 * @param baseFactory
	 * @return Resp
	 */
	public Resp create(BaseFactory baseFactory);

	/** 
	 * @Title delete
	 * @Description 删除工厂
	 * @author luoteng
	 * @date 2017年5月24日 上午10:58:04
	 * @param baseFactory
	 * @return Resp
	 */
	public Resp delete(BaseFactory baseFactory);
	
	/** 
	 * @Title findListByCondition
	 * @Description 获取工厂列表
	 * @author luoteng
	 * @date 2017年5月24日 上午10:58:16
	 * @param page
	 * @param rows
	 * @param condition
	 * @return Pager<BaseFactory>
	 */
	public Pager<BaseFactory> findListByCondition(int page, int rows, BaseFactory condition);
	
	/** 
	 * @Title findById
	 * @Description 根据工厂ID获取工厂信息
	 * @author luoteng
	 * @date 2017年5月24日 上午10:58:34
	 * @param id
	 * @return BaseFactory
	 */
	public BaseFactory findById(String id);
	
	/** 
	 * @Title update
	 * @Description 修改工厂信息
	 * @author luoteng
	 * @date 2017年5月24日 上午10:58:54
	 * @param baseFactory
	 * @return Resp
	 */
	public Resp update(BaseFactory baseFactory);
	
	/** 
	 * @Title queryFactoryUserAll
	 * @Description 获取工厂下的人员，为空则取所有人
	 * @author zhangx
	 * @date 2017年5月24日 上午10:59:46
	 * @param condition
	 * @return List<BaseFactoryUser>
	 */
	public List<BaseFactoryUser> queryFactoryUserAll(BaseFactoryUserKey condition);

	/** 
	 * @Title updateFactoryUser
	 * @Description 更新工厂下的用户
	 * @author zhangx
	 * @date 2017年5月24日 上午11:00:22
	 * @param list
	 * @return Resp
	 */
	public Resp updateFactoryUser(List<BaseFactoryUserKey> list);

	/** 
	 * @Title updateFacResRelation
	 * @Description 批量更新工厂资源关联信息
	 * @author qh
	 * @date 2017年5月24日 上午11:01:04
	 * @param factorys 工厂Id列表
	 * @param factoryResources 工厂资源关系列表
	 * @return Resp
	 */
	Resp updateFacResRelation(List<String> factorys, List<BaseFactoryResource> factoryResources);

	/** 
	 * @Title queryByFactoryId
	 * @Description 根据工厂Id查询关联资源
	 * @author qh
	 * @date 2017年5月24日 上午11:01:11
	 * @param factroyId
	 * @return List<BaseFactoryResource>
	 */
	List<BaseFactoryResource> queryByFactoryId(String factroyId);
	
	/** 
	 * @Title queryFactoryTypeAll
	 * @Description 查询所有的工厂类型
	 * @author luoteng
	 * @date 2017年5月24日 上午11:01:40
	 * @return List<BaseFactory>
	 */
	public List<BaseFactory> queryFactoryTypeAll();
	
	/** 
	* @Title: queryUserFactory 
	* @Description: 查询用户的工厂
	* @author zhangxu 
	* @2017年6月6日:2017年6月6日:下午1:27:16
	* @param @param id
	* @param @return    
	* @return BaseFactory
	* @version V0.1    
	* @throws 
	*/
	public List<BaseFactory> queryUserFactory(String userId);
	



	/** 
	* @Title: queryFactoryDtoByUser 
	* @Description: 查询用户拥有的工厂信息
	* @author zhangxu 
	* @2017年6月30日:2017年6月30日:下午1:38:07
	* @param @param userInfo
	* @param @return    
	* @return List<UserFactoryDto>
	* @version V0.1    
	* @throws 
	*/
	public List<UserFactoryDto> queryFactoryDtoByUser(BaseUser userInfo);
	
	/**
	 * @Description: 根据SAP工厂号，关联查询相关数据
	 * @param @param sapFactoryCode
	 * @param @return   
	 * @return List<BaseFactoryCodeInfo>  
	 * @author sun_yq
	 * @date 2017年9月5日 下午5:53:20
	 */
	List<BaseFactoryCodeInfo> queryCodeBySapFactoryCode(String sapFactoryCode);
	
	/** 
	 * @Title queryFactoryType
	 * @Description 根据工厂号 查询 工厂类型
	 * @author luoteng
	 * @date 2017年11月9日:上午9:44:07
	 * @param factoryCode
	 * @return String
	 */
	public String queryFactoryType(String factoryCode);
	
	/** 
	 * @Title queryFactoryType
	 * @Description 根据工厂类型查询工厂编码
	 * @author pangxl
	 * @date 2017年11月9日:上午10:44:07
	 * @param factoryType
	 * @return String
	 */
	public List<BaseFactory> queryFactoriesByType(String factoryType);
	/**
	 * @Description: 查询工厂名称
	 * @param @param factoryCode
	 * @param @return   
	 * @return List<BaseFactory>  
	 * @author sun_yq
	 * @date 2017年11月16日 上午11:07:28
	 */
	public List<BaseFactory> queryFactoryNameByFactoryCode(String factoryCode);
	/**
	 * @Description: 查询工厂名称、仓库名称等信息
	 * @param @param factoryCode
	 * @param @return   
	 * @return List<BaseFactoryNameInfo>  
	 * @author sun_yq
	 * @date 2017年11月16日 上午11:08:29
	 */
	public List<BaseFactoryNameInfo> queryNameByFactoryCode(String factoryCode);
	
	/** 
	 * @Title isOpenStorage
	 * @Description 判断工厂是否开启库存
	 * @author luoteng
	 * @date 2017年11月24日:下午3:48:12
	 * @param factoryCode
	 * @return Boolean
	 */
	public Boolean isOpenStorage(String factoryCode);
	
	/**
	 * 工厂组增删改查
	 * @param baseFactoryGroup
	 * @return
	 */
	public Resp createBaseFactoryGroup(BaseFactoryGroup baseFactoryGroup);
	
	public Resp deleBaseFactoryGroup(BaseFactoryGroup baseFactoryGroup);
	
	public Pager<BaseFactoryGroup>findListByGroupCondition(int page, int rows, BaseFactoryGroup condition);
	
	public BaseFactoryGroup findBaseFactoryGroupById(String id);
	
	public Resp updateBaseFactoryGroup(BaseFactoryGroup baseFactoryGroup);
	

	public BaseFactoryGroup findByGroupCode(String groupCode);
	/**
	 * 查询全部工厂
	 * jzh
	 * @return
	 */
	public List<BaseFactory> queryFactoryAll();
	
	/**
	 * 查询全部工厂组
	 * 王治国 20171228
	 */
	public List<BaseFactoryGroup> getGroups();
}
